#include <assert.h>
#include "tu_config.h"
#include "MemoryAllocator.h"

namespace gameswf {
	static void* defaultMemAlloc(size_t size) { return malloc(size); }
	static void defaultMemFree(void* p) { free(p); }
	static void* defaultMemRealloc(void* p, size_t size) { return realloc(p, size); }

	static funcMemAlloc g_FuncMemAlloc = defaultMemAlloc;
	static funcMemFree g_FuncMemFree = defaultMemFree;
	static funcMemRealloc g_FuncMemRealloc = defaultMemRealloc;

	void setFuncMemAlloc(funcMemAlloc func)
	{
		g_FuncMemAlloc = func;
	}

	void setFuncMemFree(funcMemFree func)
	{
		g_FuncMemFree = func;
	}

	void setFuncMemRealloc(funcMemRealloc func)
	{
		g_FuncMemRealloc = func;
	}

	void* allocMem(size_t size)
	{
		assert(g_FuncMemAlloc);
		void* ret = (*g_FuncMemAlloc)(size);
		return ret;
	}

	void freeMem(void* p)
	{
		assert(g_FuncMemFree);
		(*g_FuncMemFree)(p);
	}

	void* reallocMem(void* p, size_t size)
	{
		assert(g_FuncMemRealloc);
		void* ret = (*g_FuncMemRealloc)(p, size);
		return ret;
	}
}	// namespace gameswf
